   10 REM >!RUNIMAGE
   20 REM DESKTOP STAMP FILES
   30 REM
   40 REM
   50 REM
   60 REM
   70: 
   80 ON ERROR PROCerror(ERR,REPORT$+STR$(ERL))
   90 PROCinitialise
  100:
  110 REPEAT
  120 SYS "Wimp_Poll",51,block% TO A%
  130 CASE A% OF
  140 REM WHEN 2 : SYS "Wimp_OpenWindow",,block%
  150 REM WHEN 3 : PROCclose_window(!block%,FALSE)
  160 WHEN 6 : PROCbutton_click(block%!8,block%!12,block%!16)
  170 REM WHEN 7 : PROCdrag_done
  180 REM WHEN 8 : PROCkey_press(!block%,block%!4,block%!8,block%!24)
  190 WHEN 9 : PROCmenu_select(!block%,block%!4)
  200 WHEN 17,18 : PROCreceive(block%!16)
  210 ENDCASE
  220 UNTIL quit%
  230 SYS "Wimp_CloseDown"
  240 END
  370:
  380 DEFPROCbutton_click(B%,W%,I%)
  390 CASE B% OF
  400 REM WHEN 1 : PROCsa_click(12)
  410 WHEN 2 : PROCmenu_click(W%,!block%,block%!4+12)
  420 REM WHEN 4 : PROCsa_click(1)
  430 REM WHEN 16,64 : PROCdrag_click
  440 ENDCASE
  450 ENDPROC
  460:
  700 DEFPROCmenu_select(A%,B%)
  720 IF mw%=-2 THEN 
  730 CASE A% OF
  740 WHEN 0 : PROCget_filetype(B%) 
  750 WHEN 1 : quit%=TRUE
  760 ENDCASE
  770 ENDIF
  850 ENDPROC
  860:
  870 DEFPROCreceive(M%)
  880 CASE M% OF
  890 WHEN 0 : quit%=TRUE
  900 REM WHEN 2 :PROCsave_notes(FNget_name(block%+44))
  910 WHEN 3 : IF block%!12=0 PROCload_merge(block%!20,FNget_name(block%+44))
  920 ENDCASE
  930 ENDPROC
 1060:
 1070 DEFPROCmenu_click(W%,X%,Y%)
 1080 mw%=W%:mx%=X%:my%=Y%
 1090 CASE W% OF
 1100 WHEN -2 : PROCmaster_menu("Stamper","Filetype,Quit,",X%,140)
 1130 ENDCASE
 1140 ENDPROC
 2310:
 2320 DEFPROCload_merge(W%,A$)
 2330 block%!12=block%!8
 2340 block%!16=4:!block%=64
 2350 SYS "Wimp_SendMessage",17,block%,block%!4
 2380 PROCload_notes(A$)
 2400 ENDPROC
 2410:
 2420 DEFPROCload_notes(A$)
 2425 SYS "OS_File",13,A$ TO Object%
 2430 IF Object%=1 SYS "OS_File",18,A$,filetype%
 2520 ENDPROC
 2900:
 2910 DEFFNget_name(P%)
 2920 A$=""
 2930 WHILE ?P%<>0 AND ?P%<>13
 2940 A$=A$+CHR$(?P%):P%+=1
 2950 ENDWHILE
 2960 =A$
 3210:
 3220 DEFPROCerror(!block%,$(block%+4))
 3230 SYS "Wimp_ReportError",block%,1,"Stamp"
 3240 ENDPROC
 3250:
 3260 DEFPROCinitialise
 3270 DIM block% 256,menu% 1024,buff% 10,filetypetable%(15)
 3280 filetypetable%()=&FFF,&FFE,&FFD,&FFC,&FFB,&FFA,&FF9,&FF8,&FF7,&FF6,&FF5,&FED,&FEC,&FEB,&BBC
 3370 quit%=FALSE
 3380:
 3390 SYS "Wimp_Initialise",200,&4B534154,"Stamper"
 3400 A%=FNind_icon(-1,1,7,"!stamp",0,0,68,68,&3102)
 3410 filetype%=&FFB
 3610 ENDPROC
 3800:
 3810 DEFFNicon(handle%,text$,X%,Y%,W%,H%,F%)
 3815 block%!0=handle%
 3820 block%!4=X%:block%!8=Y%
 3830 block%!12=X%+W%:block%!16=Y%+H%
 3835 block%!20=F%
 3840 IF text$<>"" $(block%+24)=text$
 3850 SYS "Wimp_CreateIcon",,block% TO I%
 3860 =I%
 3870:
 3880 DEFFNind_icon(window%,scb%,len%,text$,L%,B%,W%,H%,F%)
 3885 block%!28=scb%
 3900 block%!24=buff%:block%!32=len%
 3910 $buff%=text$
 3920 =FNicon(window%,"",L%,B%,W%,H%,F%)
 3930:
 3940 DEFPROCmaster_menu(title$,m$,X%,Y%)
 3950 PROCcreate_menu(menu%,title$,m$)
 3960 SYS "Wimp_CreateMenu",,menu%,X%-menu%!16/2,Y%
 3970 ENDPROC
 3980:
 3990 DEFPROCcreate_menu(M%,title$,m$)
 4000 LOCAL I%,max%
 4010 $M%=title$:M%!12=&70207
 4020 M%!20=44:M%!24=0
 4030 I%=M%+28:max%=LEN(title$)-2
 4040 REPEAT
 4050 A%=INSTR(m$,","):IF A%>max% max%=A%
 4060 !I%=0:I%!4=0
 4070 $(I%+12)=LEFT$(m$,A%-1)
 4080 m$=MID$(m$,A%+1)
 4090 CASE $(I%+12) OF
 4110 WHEN "Filetype" : I%!4=M%+100:PROCcreate_menu(I%!4,"Filetype","Text,Command,Data,Utility,BASIC,Module,Sprite,Absolute,BBC font,Font,PoScript,Palette,Template,Obey,BBC ROM,OTHER,")
 4120 WHEN "OTHER" :I%!4=M%+500:PROCcreate_entry_menu(I%!4,"Filetype")
 4130 ENDCASE
 4140 I%!8=&7000021:I%+=24
 4150 UNTIL m$=""
 4160 I%!-24=&80:M%!16=max%*16
 4170 ENDPROC
 4180:
 4200 DEFPROCcreate_entry_menu(M%,title$)
 4205 LOCAL I%
 4210 $M%=title$:M%!12=&70207
 4220 M%!20=44:M%!24=0
 4230 I%=M%+28
 4260 !I%=4:I%!4=0:$(M%+100)=STR$~(filetype%)
 4270 I%!12=M%+100:I%!16=0:I%!20=4
 4340 I%!8=&7000121
 4360 I%!0=I%!0 OR &80:M%!16=(LEN(title$)-2)*16
 4370 ENDPROC
 4380:
 4390 DEFPROCget_filetype(select%)
 4400 IF select%=15 THEN
 4410 filetype%=EVAL("&"+$(menu%+700))
 4420 ELSE 
 4430 filetype%=filetypetable%(select%)
 4440 ENDIF
 4450 ENDPROC
